#!/usr/bin/env lua
-- 清理子目录中.git文件夹的Lua程序
-- 遵循便携版设计，使用HOME环境变量定位根目录
-- 注意：不会删除顶层的.git目录，只删除子目录中的.git目录

-- 获取根目录路径
local home_dir = os.getenv("HOME") or os.getenv("USERPROFILE")
if not home_dir then
    print("错误: 无法获取HOME环境变量")
    return 1
end

-- 规范化路径分隔符 - 使用正斜杠以兼容SH终端（基于BUSYBOX）
local function normalize_path(path)
    return path:gsub("\\", "/")
end

-- 设置根目录
local root_dir = normalize_path(home_dir)

-- 检查是否为顶层.git目录
local function is_top_level_git(dir)
    local top_level_git = normalize_path(root_dir).."/.git"
    return dir == top_level_git
end

-- 递归删除目录的函数
local function remove_dir(dir)
    -- 确保不是顶层的.git目录
    if is_top_level_git(dir) then
        print("跳过顶层.git目录: "..dir)
        return false
    end
    
    print("删除目录: "..dir)
    
    -- 在SH终端（基于BUSYBOX）上使用rm命令删除目录
    local cmd = string.format('rm -rf "%s"', dir)
    local handle = io.popen(cmd)
    if handle then
        handle:close()
        -- 检查目录是否仍然存在
        local f = io.open(dir)
        if f then
            f:close()
            return false
        else
            return true
        end
    else
        return false
    end
end

-- 递归遍历目录并清理.git目录
local function clean_git_dirs(start_dir)
    local git_dirs_count = 0
    local deleted_count = 0
    local failed_count = 0
    local failed_dirs = {}

    -- 使用find命令查找所有.git目录
    local cmd = string.format('find "%s" -type d -name ".git"', start_dir)
    local handle = io.popen(cmd)
    if handle then
        for dir in handle:lines() do
            dir = normalize_path(dir)
            git_dirs_count = git_dirs_count + 1
            
            -- 不删除顶层的.git目录
            if not is_top_level_git(dir) then
                print("找到子目录.git: "..dir)
                local ok = remove_dir(dir)
                if ok then
                    deleted_count = deleted_count + 1
                else
                    failed_count = failed_count + 1
                    table.insert(failed_dirs, dir)
                end
            else
                print("跳过顶层.git目录: "..dir)
            end
        end
        handle:close()
    end

    return git_dirs_count, deleted_count, failed_count, failed_dirs
end

-- 主函数
local function main()
    print("开始清理子目录中的.git文件夹...")
    print("指定目录: "..root_dir)
    print("注意：不会删除顶层的.git目录")
    print("----------------------------------------")

    -- 清理根目录下的.git子目录
    local git_dirs_count, deleted_count, failed_count, failed_dirs = clean_git_dirs(root_dir)

    -- 显示结果
    print("\n----------------------------------------")
    print(".git文件夹清理完成！")
    print("总计找到: "..git_dirs_count.." 个.git目录")
    print("成功删除: "..deleted_count.." 个子目录中的.git文件夹")
    
    if failed_count > 0 then
        print("删除失败: "..failed_count.." 个子目录中的.git文件夹")
        for _, dir in ipairs(failed_dirs) do
            print("  - "..dir)
        end
    end

    print("\n提示: 清理完成，当前项目的顶层Git信息仍会被保留。")

    return 0
end

-- 运行主函数
os.exit(main())
